package br.com.gerenteweb.daos;

import java.io.Serializable;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;

import br.com.gerenteweb.cliente.Cliente;
import br.com.hibernate.util.HibernateUtil;

public class ClienteDao implements Serializable {
	private Session sessao;
	private Transaction trans;
	private List<Cliente> list;

	public void addCliente(Cliente cCliente) {
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			trans = sessao.beginTransaction();

			Cliente cliente = new Cliente();
			cliente.setLoja(cCliente.getLoja());
			cliente.setNomeRazao(cCliente.getNomeRazao());
			cliente.setCpfCnpj(cCliente.getCpfCnpj());
			cliente.setApelidoFantasia(cCliente.getApelidoFantasia());
			cliente.setEndereco(cCliente.getEndereco());
			cliente.setContato(cCliente.getContato());

			sessao.save(cliente);
			trans.commit();
			System.out.println("Cliente inserido com sucesso");

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sessao.close();
		}

	}

	public void updateCliente(Cliente cCliente) throws Exception {
		try {
			sessao = (Session) HibernateUtil.getSessionFactory();
			trans = sessao.beginTransaction();
			sessao.update(cCliente);
			sessao.flush();
			trans.commit();
			sessao.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sessao.close();
		}
	}

	public void removeCliente(Cliente cCliente) throws Exception {
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			trans = sessao.beginTransaction();

			sessao.delete(cCliente);
			trans.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sessao.close();
		}
	}

	public Cliente getPorID(Long id) {
		Cliente cCliente = null;
		try {
			sessao = HibernateUtil.getSessionFactory().openSession();
			trans = sessao.beginTransaction();

			cCliente = (Cliente) sessao.load(Cliente.class, id);
			trans.commit();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			sessao.close();
		}
		return cCliente;
	}

	public List<Cliente> getClientes() {
		sessao = HibernateUtil.getSessionFactory().openSession();
		trans = sessao.beginTransaction();

		Criteria cri = sessao.createCriteria(Cliente.class);
		this.list = cri.list();
		return list;
	}

	public Session getSessao() {
		return sessao;
	}

	public void setSessao(Session sessao) {
		this.sessao = sessao;
	}

	public Transaction getTrans() {
		return trans;
	}

	public void setTrans(Transaction trans) {
		this.trans = trans;
	}

	public List<Cliente> getList() {
		return list;
	}

	public void setList(List<Cliente> list) {
		this.list = list;
	}

}
